"! /usr/bin/vim
" 系统自动检测文件类型，调用对应的缩进、补全等等
filetype on
" 想要自定义缩进需要使用下列选项，一般不需要打开，使用系统默认的缩进格式就基本可以满足要求了，想要自定义缩进，需要编写一个缩进文件
"filetype indent on
filetype plugin on
filetype plugin indent on
"让vim识别不同的文件格式

"让vim可以使用鼠标
set mouse=a
" 出错时取消系统提示音
set vb t_vb=
" vim 各种元素的配色调整
" ：highlight 查看所有元素的配色方案
" highlight Pmenu 调整代码补全框的配色
" highlight VertSplit 调整分屏的时候分隔线的配色
" highlight TabLine 标签页未选中 TabLineSel 当前标签页 TabLineFill 空白部分 配色
" NONE表示取消该属性设置
" term 黑白终端 cterm 采色终端 gui 图形界面
" bg 背景色 fg前景色
" reverse 反转bold 加粗
" 设置左右分屏时分隔线的配色
highlight VertSplit cterm=NONE
highlight StatusLine cterm=bold
highlight StatusLineNC cterm=NONE
highlight Pmenu cterm=NONE ctermbg=NONE ctermfg=white
highlight TabLine cterm=NONE ctermbg=NONE
highlight TabLineSel cterm=bold ctermbg=DarkBlue ctermfg=255
highlight TabLineFill cterm=NONE
" 标签列
highlight SignColumn ctermbg=NONE


"设置tab键的宽度等
set ts=4
set softtabstop=4
set shiftwidth=4
"set expandtab
set autoindent
set autochdir
"ts 是tabstop的缩写，设TAB宽度为4个空格。
" softtabstop 表示在编辑模式的时候按退格键的时候退回缩进的长度，当使用 expandtab 时特别有用。
" shiftwidth 表示每一级缩进的长度，一般设置成跟 softtabstop 一样。
" expandtab表示缩进用空格来表示，noexpandtab 则是用制表符表示一个缩进。
" autoindent自动缩进
" vim在当前目录下执行操作

" 使用系统剪贴板
" 直接安装gvim就可以使用了，vim本身没有找到解决方法
"set clipboard=unnamedplus
" 解决粘贴剪切板内容时缩进错乱问题
set pastetoggle=<F12>

"重新加载配置文件
map R :source $MYVIMRC<CR>
" 高亮语法
syntax on
" 同时打开相对行号和绝对行号
set relativenumber
set number
" 自动折叠们还是同一行
set wrap
" 显示cmd信息
set showcmd
"命令模式：自动补全;使用tab键显示和切换
set wildmenu
set fencs=utf-8,gbk

" 高亮所在行
set cursorline

" 打开文件默认回到上次编辑位置，需要修改~/.viminfo文件权限
" chmod 777 .viminfo
au BufReadPost * if line("'\"") > 0|if line("'\"") <= line("$")|exe("norm '\"")|else|exe "norm $"|endif|endif


" ==========
" ==========  插件安装
" ==========

call plug#begin('~/.vim/plugged')
" 主题插件
Plug 'arcticicestudio/nord-vim'
Plug 'KeitaNakamura/neodark.vim' 
Plug 'joshdick/onedark.vim'
"文件目录插件
Plug 'preservim/nerdtree'
" 语法补全
" Plug 'ycm-core/YouCompleteMe'
"Plug 'neoclide/coc.nvim', {'branch': 'release'}

" markdown插件
Plug 'godlygeek/tabular' "必要插件，安装在vim-markdown前面
Plug 'plasticboy/vim-markdown'
" Markdown语法高亮段落折叠，查看目录，段间跳转等功能
" :help Vim-markdown 查看帮助，还有一些快捷键可以使用
" [[ "跳转上一个标题
" ]] "跳转下一个标题
" ]c "跳转到当前标题
" ]u "跳转到副标题
" zr "打开下一级折叠
" zR "打开所有折叠
" zm "折叠当前段落
" zM "折叠所有段落
" :Toc "显示目录

" markdown预览插件，第一个是预览的数学支持插件
Plug 'iamcco/mathjax-support-for-mkdp'
Plug 'iamcco/markdown-preview.vim'

" latex插件
Plug 'lervag/vimtex'
" latex预览插件
Plug 'xuhdev/vim-latex-live-preview', { 'for': 'tex' }
" 代码片段插件snippets，快速数学的根本
Plug 'SirVer/ultisnips'
" Plug 'honza/vim-snippets'
" 底部状态栏插件
"Plug 'vim-airline/vim-airline'
"Plug 'vim-airline/vim-airline-themes'


" 自动保存插件
" Plug 'vim-scripts/vim-auto-save'
" let auto_save=1

" 添加书签插件,vim 本身就有这个功能
" Plug 'kshenoy/vim-signature'

" 纯文本编辑模式
Plug 'junegunn/goyo.vim'

" 侧边栏显示所有寄存器中的内容
"Plug 'junegunn/vim-peekaboo'
" Initialize plugin system
" vim 中文文档
Plug 'yianwillis/vimcdoc'
" 文件历史版本树状图
Plug 'voldikss/vim-translator'
Plug 'mbbill/undotree'
Plug 'gityrqa/gtrans'
call plug#end()
" ==========
" ==========  各插件配置
" ==========
" ========gtrans======
vnoremap <C-t> :call Gtrans()<CR>
nnoremap <C-t> :Gtrans<CR>
" Echo translation in the cmdline
nmap <silent> <Leader>t <Plug>TranslateW
vmap <silent> <Leader>t <Plug>TranslateWV
"=====theme============
"设置配色方案
colorscheme neodark
" 取消窗口背景色
hi Normal ctermbg=NONE

"=====youcompleteme=====
"上下选择的快捷键，取消tab键
" let g:ycm_key_list_select_completion = ['<Down>']
" let g:ycm_key_list_previous_completion = ['<Up>']

"===coc.nvim===
" let g:coc_global_extensions = [
"        \  'coc-json', 
"        \  'coc-vimlsp',
"        \  'coc-texlab']


"===nerdtree===
nnoremap ff :NERDTreeToggle<CR>
"let NERDTreeMapOpenInTab = "t"
"let NERDTreeMapOpenInSplit = "w"
"let NERDTreeMapOpenInVSplit= "w"

" ===markdown-preview===
" 设置浏览器路径
" let g:mkdp_path_to_chrome = "/usr/bin/chromium"
nmap <silent> <F8> <Plug>MarkdownPreview        " 普通模式
imap <silent> <F8> <Plug>MarkdownPreview        " 插入模式
nmap <silent> <F9> <Plug>StopMarkdownPreview    " 普通模式
imap <silent> <F9> <Plug>StopMarkdownPreview    " 插入模式
" 取消默认折叠
let g:vim_markdown_folding_disabled = 1

" =======Vimtex=======
let g:tex_flavor='latex'
let g:vimtex_view_method='zathura'
let g:vimtex_quickfix_mode=0 
" 对中文的支持
let g:Tex_CompileRule_pdf = 'xelatex -synctex=1 --interaction=nonstopmode $*'
let g:vimtex_compiler_latexmk_engines = {'_':'-xelatex'}
let g:vimtex_compiler_latexrun_engines ={'_':'xelatex'}

" =======tex-perview======
" 设置使用的pdf查看器
let g:livepreview_previewer = 'zathura'
" 文件刷新频率,
autocmd Filetype tex setl updatetime=10000
" updatetime单位为毫秒，连续输入不刷新，输入停止开始计时，连续3秒没有输入刷新一次。
" vim-latex-live-preview默认使用pdflatex来编译.tex文件。如果.tex文件中有中文的话，会报错, 打开【latexlivepreview.vim 】文件，将其中的【pdflatex】全部替换为【xelatex】，保存后，重新启动vim，编辑含中文的.tex文件，实时预览正常。
nnoremap <F5> :LLPStartPreview<CR>

" ========snippet=======
" Trigger configuration. You need to change this to something other than <tab> if you use one of the following:
" - https://github.com/Valloric/YouCompleteMe
" - https://github.com/nvim-lua/completion-nvim
" 设置snippets的搜索目录
let g:UltiSnipsSnippetDirectories=["UltiSnips","UltiSnips/tex-math"]
let g:UltiSnipsExpandTrigger="<tab>"
let g:UltiSnipsJumpForwardTrigger="<tab>"
let g:UltiSnipsJumpBackwardTrigger="<S-tab>"
let g:UltiSnipsEditSplit="vertical"

" ====vim-signnature=====
" mx 设置/删除书签'x'
" m<space> 删除所有书签
" [` ]` `] `[ [' ]' '[ '] a-zA-Z书签间移动
" m, m. m/ m-
"
" m[0-9] 设置删除@#$%^&*书签
" [- [= -[ =[... 书签间移动
" m？m<BS> m<S-[0-9]> 

"=====goyo=====
nnoremap gy :Goyo<CR>

"=====undotree=====
nnoremap <F6> :UndotreeToggle<CR>


"=====vim-airline-themes=====
"let g:airline_theme="molokai"
"" 关闭状态显示空白符号计数
"let g:airline#extensions#whitespace#enabled = 0
"let g:airline#extensions#whitespace#symbol = '!'
"let g:airline_powerline_fonts = 0 
" ==========
" ==========  搜索
" ==========

" exec 系统开始时，读取配置文件时运行取消高亮的指令，
exec "nohlsearch"
" 高亮搜索，是默认设置
set hlsearch
" 输入的同时，高亮;是用不了
set incsearch
" 忽略大小写
set ignorecase
" 智能搜索，小写忽略大小写，大写不忽略
set smartcase
" 取消搜索 高亮
nnoremap \ :nohlsearch <CR>

" ==========
" ==========  光标
" ==========

" 设置光标上下始终显示5行
set scrolloff=10
" Set cursor shape and color
if &term =~ "xterm"
    " INSERT mode
    let &t_SI = "\<Esc>[5 q" . "\<Esc>]12;white\x7"
    " REPLACE mode
    let &t_SR = "\<Esc>[3 q" . "\<Esc>]12;white\x7"
    " NORMAL mode
    let &t_EI = "\<Esc>[1 q" . "\<Esc>]12;green\x7"
endif
" 1 -> blinking block  闪烁的方块
" 2 -> solid block  不闪烁的方块
" 3 -> blinking underscore  闪烁的下划线
" 4 -> solid underscore  不闪烁的下划线
" 5 -> blinking vertical bar  闪烁的竖线
" 6 -> solid vertical bar  不闪烁的竖线
"设置光标样式,windows上无效，linux上有效果


" ==========
" ==========  分屏
" ==========

"向左分屏ww光标移动到左屏
nnoremap v :vsplit ~/.vim/vimrc<CR>
"光标跳转
nnoremap h <C-w>h
nnoremap l <C-w>l
" 分屏宽度调节
"nnoremap <Up> :res +5<CR>
"nnoremap <Down> :res -5<CR>
" Alt+Left/Right 分屏线移动
nnoremap [1;3D :vertical res -5<CR>
nnoremap [1;3C :vertical res +5<CR>

" ==========
" ==========  分页
" ==========

"创建新标签
nnoremap te :tabe<CR>
"关闭标签
nnoremap tc :tabc<CR>
"标签页切换
nnoremap th :-tabnext<CR>
nnoremap tl :+tabnext<CR>



" ==========
" ==========  键位设置
" ==========

"nore 表示不递归
"i 表示insert模式下
"n 表示normal模式下
"inoremap <Up> <Nop>
"inoremap <Down> <Nop>
"inoremap <Left> <Nop>
"inoremap <Right> <Nop>
inoremap jj <Esc>
nnoremap <C-j> 5j
nnoremap <C-k> 5k
inoremap <Esc> <Nop>
nnoremap L $
nnoremap H ^
inoremap <C-k> <Up>
inoremap <C-j> <Down>
inoremap <C-l> <Right>
inoremap <C-h> <left>
nnoremap <C-s> :w<CR>
nnoremap Q :q<CR>
" 显示寄存器内容
nnoremap <C-r> :registers<CR>

" 复制粘贴快捷键
" yy 复制一样
" Alt+c/v 使用系统剪切板
" Alt键设置方法：在插入模式下，按Ctrl+v 然后按Alt+key 
"nnoremap c "+y
"nnoremap v "+p
" Alt+y/p 使用字母寄存器，无数字寄存器总是被剪切替代的优点
" 使用"Ay 可以将内容附加(添加到原有内容之后)到A寄存器里
"nnoremap y "ay
"nnoremap p "ap

nnoremap m :vsplit ~/.vim/UltiSnips/tex-math/
nnoremap t :UltiSnipsEdit<CR>
"-----------------------------------
" vim 常识
" vim 操作+动作。y3l,d3w,ci",ciw……

" 文件跳转
" 普通模式下 gf 跳转到链接文件
" Ctrl+o 返回原文件

" 文件内跳转
" Ctrl+o/i

" ：highlight 各元素样式设置








